#ifndef IO__HIKROBOT_HPP
#define IO__HIKROBOT_HPP

#include <chrono>
#include <string>

#include "MvCameraControl.h"
#include "camera.hpp"
#include "rclcpp/rclcpp.hpp"
#include "sensor_msgs/msg/image.hpp"
namespace io
{
  class HikRobot : public CameraBase
  {
  public:
    HikRobot(double exposure_ms, double gain, const std::string &vid_pid, const rclcpp::Logger &logger);
    ~HikRobot() override;

    // 实现基类接口
    void read(sensor_msgs::msg::Image &img) override;
    bool set_param(const std::string &param_name, double value) override;
    void close() override;
    bool open() override; 

  private:
    double exposure_us_;   // 曝光时间（微秒）
    double gain_;          // 增益值
    void *handle_;         // 相机句柄
    int vid_, pid_;        // USB设备VID/PID
    int width_, height_;   // 图像分辨率
    MV_CC_PIXEL_CONVERT_PARAM convert_param_; // 像素转换参数
    MV_IMAGE_BASIC_INFO img_info_;            // 图像基本信息

    bool try_open();                   // 单次打开相机尝试
    void set_vid_pid(const std::string &vid_pid);  // 解析VID/PID
    void reset_usb() const;            // USB设备重置
    bool set_float_value(const std::string &name, double value);  // 设置浮点参数
    bool set_enum_value(const std::string &name, unsigned int value);  // 设置枚举参数
    bool set_exposure(double exposure_ms);  // 单独处理曝光设置
    bool set_gain(double gain);            // 单独处理增益设置
  };
}

#endif // IO__HIKROBOT_HPP
